package com.sky.controller.admin;

import com.sky.dto.CategoryDTO;
import com.sky.dto.CategoryPageQueryDTO;
import com.sky.entity.Category;
import com.sky.result.PageResult;
import com.sky.result.Result;
import com.sky.service.CategoryService;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.apache.juli.logging.Log;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;
//分类模块功能
@Slf4j
@RestController
@RequestMapping("/admin/category")
public class CategoryController {

    //将service层进行注入
    @Autowired
    private CategoryService categoryService;

    //
    @ApiOperation("这是根据类型查询分类功能的方法")
    @GetMapping("/list")
    public Result<List<Category>> selectCategoryByType(Integer type) {
        //传入的数据是普通类型 直接接收

        log.info("正在执行根据类型查询分类......{}", type);

        //通用service层的selectCategoryByType方法 将type传入 得到category集合
        List<Category> category = categoryService.selectCategoryByType(type);

        //如果没有出现异常 直接响应该集合
        return Result.success(category);
    }

    @ApiOperation("这是根据分页查询分类功能的方法")
    @GetMapping("/page")
    public Result<PageResult> pageSelectCategory(CategoryPageQueryDTO categoryPageQueryDTO) {
        //普通参数 使用DTO对象进行接收

        log.info("正在执行根据分页查询分类..........{}", categoryPageQueryDTO);

        //一样的 分页查询 返回的结构是封装好的PageResult对象
        //通过service层的pageSelectCategory方法 传入DTO对象
        PageResult p = categoryService.pageSelectCategory(categoryPageQueryDTO);

        //如果没有出现异常 响应该对象
        return Result.success(p);
    }

    @ApiOperation("这是修改分类功能的方法")
    @PutMapping
    public Result updateCategory(@RequestBody CategoryDTO categoryDTO) {
        //修改分类的方法 传入的是json格式的参数 使用@RequestBody注解 封装到DTO对象中

        log.info("正在执行修改分类的方法......{}", categoryDTO);

        //通过service层 执行updateCategory方法将DTO对象传入
        categoryService.updateCategory(categoryDTO);

        //如果没有出现异常则响应成功
        return Result.success();
    }

    @ApiOperation("这是启停菜品分类功能的方法")
    @PostMapping("/status/{status}")
    public Result statusStartOrStop(@PathVariable Integer status, Long id) {
        //路径参数 使用@PathVariable进行数据接收 后面还有一个id是普通参数直接接收

        log.info("正在执行启动/停止菜品分类的方法....启动/停止:{},分类的id{}", status, id);

        //调用service层的statusStartOrStop的方法 传入两个参数
        categoryService.statusStartOrStop(status, id);

        //如果没有出现异常则响应成功
        return Result.success();
    }

    @PostMapping
    @ApiOperation("这是添加菜品分类的功能方法")
    public Result addCategory(@RequestBody CategoryDTO categoryDTO) {
        //json格式的对象 通过@RequestBody进行接收 我们这里使用DTO对象进行封装

        log.info("正在执行添加菜品分类的方法......菜品名{},菜品分类{},菜品排序{}", categoryDTO.getName(),
                categoryDTO.getType(),categoryDTO.getSort());

        //通过service层的addCategory方法将DTO对象传入
        categoryService.addCategory(categoryDTO);

        //如果没有出现异常 响应操作成功的信息
        return Result.success();
    }

    @ApiOperation("这是根据id删除分类的功能方法")
    @DeleteMapping
    public Result deleteCategory(Long id) {
        //普通参数 直接接收

        log.info("正在执行根据id删除分类的方法......{}", id);

        //调用service的deleteCategory方法传入id
        categoryService.deleteCategory(id);

        //如果没有出现异常这响应执行成功的信息
        return Result.success();
    }
}
